home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #2 / Amiga Plus CD - 2004 - No. 02.iso / AmiSoft / Dev / misc / WHDLoad_dev.lha / WHDLoad / Src / slave-examples / wildwestworld.asm < prev    next >
Encoding:
Assembly Source File  |  2004-01-18  |  5.9 KB  |  319 lines

  1. ;*---------------------------------------------------------------------------
  2. ;  :Program.    wildwestworld.asm
  3. ;  :Contents.    Slave for "Wild West World" from Software 2000
  4. ;  :Author.    Wepl
  5. ;  :Original    v1.x Christian Sauer
  6. ;        v1.3
  7. ;        v2.0
  8. ;  :Version.    $Id: wildwestworld.asm 1.9 2004/01/18 13:34:17 wepl Exp wepl $
  9. ;  :History.    07.08.00 started
  10. ;        03.08.01 some steps forward ;)
  11. ;        30.01.02 final beta
  12. ;        24.04.02 final
  13. ;        24.07.02 setmap added (v2.0)
  14. ;        05.08.02 1.1 release
  15. ;        20.08.02 v1.x added
  16. ;        06.10.02 v2.1en added
  17. ;        03.03.03 cleanup, correct stack on startup
  18. ;        18.01.04 df0 assign update
  19. ;  :Requires.    -
  20. ;  :Copyright.    Public Domain
  21. ;  :Language.    68000 Assembler
  22. ;  :Translator.    Devpac 3.14, Barfly 2.9
  23. ;  :To Do.
  24. ;---------------------------------------------------------------------------*
  25.  
  26.     INCDIR    Includes:
  27.     INCLUDE    whdload.i
  28.     INCLUDE    whdmacros.i
  29.     INCLUDE    lvo/dos.i
  30.  
  31.     IFD BARFLY
  32.     OUTPUT    "wart:wi/wildwestworld/WildWestWorld.Slave"
  33.     BOPT    O+                ;enable optimizing
  34.     BOPT    OG+                ;enable optimizing
  35.     BOPT    ODd-                ;disable mul optimizing
  36.     BOPT    ODe-                ;disable mul optimizing
  37.     BOPT    w4-                ;disable 64k warnings
  38.     SUPER
  39.     ENDC
  40.  
  41. ;============================================================================
  42.  
  43. CHIPMEMSIZE    = $100000
  44. FASTMEMSIZE    = $0000
  45. NUMDRIVES    = 1
  46. WPDRIVES    = %0000
  47.  
  48. BLACKSCREEN
  49. ;DEBUG
  50. ;DISKSONBOOT
  51. DOSASSIGN
  52. HDINIT
  53. ;HRTMON
  54. IOCACHE        = 10000
  55. ;MEMFREE    = $200
  56. ;NEEDFPU
  57. ;SETPATCH
  58.  
  59. ;============================================================================
  60.  
  61. KICKSIZE    = $40000            ;34.005
  62. BASEMEM        = CHIPMEMSIZE
  63. EXPMEM        = KICKSIZE+FASTMEMSIZE
  64.  
  65. ;============================================================================
  66.  
  67. _base        SLAVE_HEADER            ;ws_Security + ws_ID
  68.         dc.w    15            ;ws_Version
  69.         dc.w    WHDLF_NoError|WHDLF_EmulPriv|WHDLF_Examine    ;ws_flags
  70.         dc.l    BASEMEM            ;ws_BaseMemSize
  71.         dc.l    0            ;ws_ExecInstall
  72.         dc.w    _boot-_base        ;ws_GameLoader
  73.         dc.w    _data-_base        ;ws_CurrentDir
  74.         dc.w    0            ;ws_DontCache
  75. _keydebug    dc.b    0            ;ws_keydebug
  76. _keyexit    dc.b    $59            ;ws_keyexit = F10
  77. _expmem        dc.l    EXPMEM            ;ws_ExpMem
  78.         dc.w    _name-_base        ;ws_name
  79.         dc.w    _copy-_base        ;ws_copy
  80.         dc.w    _info-_base        ;ws_info
  81.  
  82. ;============================================================================
  83.  
  84.     IFD BARFLY
  85.     DOSCMD    "WDate  >T:date"
  86.     ENDC
  87.  
  88. _disk1        dc.b    "df0",0
  89. _name        dc.b    "Wild West World",0
  90. _copy        dc.b    "1990 Software 2000",0
  91. _info        dc.b    "adapted by Wepl",10
  92.         dc.b    "Version 1.3 "
  93.     IFD BARFLY
  94.         INCBIN    "T:date"
  95.     ENDC
  96.         dc.b    0
  97. _data        dc.b    "data",0
  98. _program    dc.b    "www_start",0
  99. _program2    dc.b    "wildwestworld",0
  100. _args        dc.b    10
  101. _args_end    dc.b    0
  102. _setmap        dc.b    "setmap d",10,0
  103.     EVEN
  104.  
  105. ;============================================================================
  106.  
  107. _bootdos    lea    (_saveregs),a0
  108.         movem.l    d1-d6/a2-a6,(a0)
  109.         move.l    (a7)+,(44,a0)
  110.  
  111.     ;open doslib
  112.         lea    (_dosname,pc),a1
  113.         move.l    (4),a6
  114.         jsr    (_LVOOldOpenLibrary,a6)
  115.         lea    (_dosbase),a0
  116.         move.l    d0,(a0)
  117.         move.l    d0,a6            ;A6 = dosbase
  118.  
  119.     ;assigns
  120.         lea    (_disk1),a0
  121.         sub.l    a1,a1
  122.         bsr    _dos_assign
  123.  
  124.     ;check version
  125.         lea    _program2,a0
  126.         move.l    a0,d1
  127.         move.l    #MODE_OLDFILE,d2
  128.         jsr    (_LVOOpen,a6)
  129.         move.l    d0,d1
  130.         move.l    #300,d3
  131.         sub.l    d3,a7
  132.         move.l    a7,d2
  133.         jsr    (_LVORead,a6)
  134.         move.l    d3,d0
  135.         move.l    a7,a0
  136.         move.l    (_resload),a2
  137.         jsr    (resload_CRC16,a2)
  138.         add.l    d3,a7
  139.         
  140.         moveq    #10,d2
  141.         lea    (_pl1_10),a3
  142.         lea    (_pl2_10),a4
  143.         cmp.w    #$4299,d0
  144.         beq    .vok
  145.         moveq    #13,d2
  146.         lea    (_pl1_13),a3
  147.         lea    (_pl2_13),a4
  148.         cmp.w    #$6687,d0
  149.         beq    .vok
  150.         moveq    #20,d2
  151.     ;    lea    (_pl1_20),a3
  152.     ;    lea    (_pl2_20),a4
  153.         cmp.w    #$7303,d0
  154.         beq    .vok
  155.         moveq    #21,d2
  156.     ;    lea    (_pl1_21),a3
  157.         lea    (_pl2_21),a4
  158.         cmp.w    #$dd8e,d0
  159.         beq    .vok
  160.         pea    TDREASON_WRONGVER
  161.         jmp    (resload_Abort,a2)
  162. .vok
  163.  
  164.     ;setmap
  165.         cmp.b    #20,d2
  166.         bne    .nosetmap
  167.         lea    _setmap,a0
  168.         move.l    a0,d1
  169.         moveq    #0,d2
  170.         moveq    #0,d3
  171.         jsr    (_LVOExecute,a6)
  172. .nosetmap
  173.         lea    (_pl2),a0
  174.         move.l    a4,(a0)
  175.  
  176.     ;load exe
  177.         lea    _program,a0
  178.         move.l    a0,d1
  179.         jsr    (_LVOLoadSeg,a6)
  180.         move.l    d0,d7            ;D7 = segment
  181.         beq    .end
  182.  
  183.     ;patch
  184.         move.l    a3,a0
  185.         move.l    d7,a1
  186.         jsr    (resload_PatchSeg,a2)
  187.  
  188.     IFD DEBUG
  189.     ;set debug
  190.         clr.l    -(a7)
  191.         move.l    d7,-(a7)
  192.         pea    WHDLTAG_DBGSEG_SET
  193.         move.l    a7,a0
  194.         jsr    (resload_Control,a2)
  195.         add.w    #12,a7
  196.     ENDC
  197.  
  198.     ;call
  199.         move.l    d7,a1
  200.         add.l    a1,a1
  201.         add.l    a1,a1
  202.         moveq    #_args_end-_args,d0
  203.         lea    (_args,pc),a0
  204.         movem.l    (_saveregs),d1-d6/a2-a6
  205.         jsr    (4,a1)
  206.  
  207.     ;remove exe
  208.         move.l    d7,d1
  209.         move.l    (_dosbase),a6
  210.         jsr    (_LVOUnLoadSeg,a6)
  211.  
  212.     ;load exe
  213.         lea    _program2,a0
  214.         move.l    a0,d1
  215.         jsr    (_LVOLoadSeg,a6)
  216.         move.l    d0,d7            ;D7 = segment
  217.         beq    .end
  218.  
  219.     ;patch
  220.         move.l    (_pl2),a0
  221.         move.l    d7,a1
  222.         move.l    (_resload),a2
  223.         jsr    (resload_PatchSeg,a2)
  224.  
  225.     IFD DEBUG
  226.     ;set debug
  227.         clr.l    -(a7)
  228.         move.l    d7,-(a7)
  229.         pea    WHDLTAG_DBGSEG_SET
  230.         move.l    a7,a0
  231.         jsr    (resload_Control,a2)
  232.         add.w    #12,a7
  233.     ENDC
  234.  
  235.     ;call
  236.         move.l    d7,a1
  237.         add.l    a1,a1
  238.         add.l    a1,a1
  239.         moveq    #_args_end-_args,d0
  240.         lea    (_args,pc),a0
  241.         movem.l    (_saveregs),d1-d6/a2-a6
  242.         jsr    (4,a1)
  243.  
  244.         pea    TDREASON_OK
  245.         jmp    (resload_Abort,a2)
  246.  
  247.     IFEQ 1
  248.     ;remove exe
  249.         move.l    d7,d1
  250.         move.l    (_dosbase),a6
  251.         jsr    (_LVOUnLoadSeg,a6)
  252.     ENDC
  253.  
  254. .end        moveq    #0,d0
  255.         move.l    (_saverts),-(a7)
  256.         rts
  257.  
  258. _pl1_10        PL_START
  259.         PL_PS    $bfc,_dbffix
  260.         PL_W    $bfc+6,$32c
  261.         PL_PS    $c12,_dbffix
  262.         PL_W    $c12+6,$32c
  263.         PL_END
  264. _pl1_13
  265. _pl1_20
  266. _pl1_21        PL_START
  267.         PL_PS    $d16,_dbffix
  268.         PL_W    $d16+6,$32c
  269.         PL_PS    $d2c,_dbffix
  270.         PL_W    $d2c+6,$32c
  271.         PL_END
  272.  
  273. _pl2_10        PL_START
  274.         PL_P    $2e566,_smc1
  275.         PL_PS    $2e76c,_dbffix
  276.         PL_W    $2e76c+6,$1f4
  277.         PL_END
  278. _pl2_13
  279. _pl2_20        PL_START
  280.         PL_P    $926,_smc1
  281.         PL_PS    $b2c,_dbffix
  282.         PL_W    $b2c+6,$1f4
  283.         PL_END
  284.  
  285. _pl2_21        PL_START
  286.         PL_P    $138,_smc1
  287.         PL_END
  288.  
  289. _smc1        move.b    #6,(a4)            ;original
  290.         bra    _flushcache
  291.  
  292. _dbffix        movem.l    d0-d1/a0,-(a7)
  293.         move.l    (12,a7),a0
  294.         moveq    #0,d0
  295.         move.w    (a0)+,d0
  296.         divu    #34,d0
  297. .1        move.b    $dff006,d1
  298. .2        cmp.b    $dff006,d1
  299.         beq    .2
  300.         dbf    d0,.1
  301.         movem.l    (a7)+,d0-d1/a0
  302.         addq.l    #2,(a7)
  303.         rts
  304.  
  305. ;============================================================================
  306.  
  307.     INCLUDE    Sources:whdload/kick13.s
  308.  
  309. ;============================================================================
  310.  
  311. _saveregs    ds.l    11
  312. _saverts    dc.l    0
  313. _dosbase    dc.l    0
  314. _pl2        dc.l    0
  315.  
  316. ;============================================================================
  317.  
  318.     END
  319.